<?php
/**
 * Created by PhpStorm.
 * User: 123
 * Date: 2020/7/21
 * Time: 13:28
 */

namespace app\service;


use phpmailer\BaseException;
use think\Db;
/**
 * 分类服务层
 * @author   juzi
 * @blog    https://blog.csdn.net/juziaixiao
 * @version  0.0.1
 * @datetime 2020年7月22日10:57:35
 */
class CategoryService extends BaseService
{





    /**
     * 商品分类数据处理
     * @author   juzi
     * @blog    https://blog.csdn.net/juziaixiao
     * @version 1.0.0
     * @date    2020年7月21日13:29:33
     * @desc    description
     * @param   [array]          $data [商品分类数据 二维数组]
     */
    public static function GoodsCategoryDataDealWith($data){
        if(!empty($data) && is_array($data))
        {
            foreach($data as &$v)
            {
                if(is_array($v))
                {

                    if(isset($v['imgurl']))
                    {

                        $v['imgurl'] = ResourceService::AttachmentPathViewHandle($v['imgurl'],true);
                    }
                    //分类等级 上级分类
                    if(isset($v['pid']))
                    {
                      if($v['pid']){
                          $v['level']='二级分类';
                          $v['level_up']=Db::name('bizpro_class')->where('id='.$v['pid'])->value('title');
                      }else{
                          $v['level']='一级分类';
                          $v['level_up']='--';
                      }
                    }



                }
            }
        }
        return DataReturn('获取成功',0,$data);
    }



    /**
     * 分类数据校验
     * @author   juzi
     * @blog    https://blog.csdn.net/juziaixiao
     * @version 1.0.0
     * @date    2020年7月21日13:29:33
     * @param    [array]          $params [输入参数]
     */
    public static function VaryData($params)
    {
        // 请求参数
        $p = [
            [
                'checked_type' => 'empty',
                'key_name' => 'title',
                'error_msg' => '名称不能为空',
                'error_code' => 20002,
            ],
//            [
//                'checked_type' => 'empty',
//                'key_name' => 'imgurl',
//                'error_msg' => '缩略图不能为空',
//                'error_code' => 20003,
//            ],
//            [
//                'checked_type' => 'empty',
//                'key_name' => 'position',
//                'error_msg' => '显示位置不能为空',
//                'error_code' => 20004,
//            ],


        ];

        $ret=ParamsChecked($params, $p);

        if(true !== $ret)
        {

            //$error_arr[0]  $error_arr[1]
            $error_arr = explode(',', $ret);
            throw new BaseException(['code'=>403 ,'errorCode'=>$error_arr[1],'msg'=>$error_arr[0],'status'=>false,'debug'=>false ]);
        }

        //位置重复判断
        if ($params['pid']<1){
            $check_data = [
                'where' => [['position', '=', $params['position']]],
                'table' => 'bizpro_class',
                'params' => $params,
                'msg' => '位置不能重复',
                'error_code' => 20001,
            ];
            self::CheckTitle($check_data);
        }

        $check_data = [
            'where' => [['title', '=', $params['title']],['pid', '=', $params['pid']]],
            'table' => 'bizpro_class',
            'params' => $params,
            'msg' => '同分类内名称不能重复',
            'error_code' => 20005,
        ];
        self::CheckTitle($check_data);
        return true ;
    }

    /**
     * 位置重复判断
     * @author   juzi
     * @blog    https://blog.csdn.net/juziaixiao
     * @version 1.0.0
     * @date    2020年7月21日15:20:43
     * @desc    description
     * @param   [array]          $params [输入参数]
     */
    public static function CheckTitle($params){
        $data = Db::name($params['table'])->where($params['where'])->find();
        $cond1=!empty($data)&&empty($params['params']['id']);
        $cond2=!empty($data)&&isset($params['params']['id'])&&intval($data['id'])!=$params['params']['id'];
        $error=0;
        //添加数据
        if($cond1)
        {

            //分类名称校验
//            if(isset($params['params']['pid']))
//            {
//                //统一分类下 名称不得相同
//                if($data['pid']==$params['params']['pid'])
//                {
//                    $error=1;
//                }
//            }
            $error=1;
        }
        //编辑数据
        if($cond2)
        {
            //统一分类下 名称不得相同
//            if($data['pid']==$params['params']['pid'])
//            {
//                $error=1;
//            }
            $error=1;
        }

        if($error)
        {
            throw new BaseException(['code'=>403 ,'errorCode'=>$params['error_code'],'msg'=>$params['msg'],'status'=>false,'debug'=>false]);

        }
        return true;
    }


    /**
     * 数据处理
     * @author   juzi
     * @blog     https://blog.csdn.net/juziaixiao
     * @version  1.0.0
     * @datetime 2020年7月21日15:24:57
     * @param    [array]          $params [输入参数]
     */
    public static function HandleData($params){
        $data = $params;

        //删除多余字段
        unset($data['thumb_img']);
        $data['imgurl']=str_replace('/upload/','',$data['imgurl']);
        return $data;
    }

    /**
     * 分类保存
     * @author   juzi
     * @blog     https://blog.csdn.net/juziaixiao
     * @version  1.0.0
     * @datetime 2020年7月21日15:25:02
     * @param    [array]          $params [输入参数]
     */
    public static  function SaveCate($data,$params){

        // 添加/编辑
        if (empty($params['id']))
        {
            $cate_id = Db::name('bizpro_class')->insertGetId($data);
            if (!$cate_id) {

                throw new BaseException(['code'=>403 ,'errorCode'=>'30006','msg'=>'添加分类失败','status'=>false,'debug'=>false]);
            }
        } else {
            $data['update_time'] = TIMESTAMP;
            //($data);exit;
            $re = Db::name('bizpro_class')->where(['id' => intval($params['id'])])->update($data);
            if (!$re)
            {
                throw new BaseException(['code'=>403 ,'errorCode'=>'30007','msg'=>'修改分类失败','status'=>false,'debug'=>false]);
            }
        }
    }


    /**
     * 分类删除
     * @author   juzi
     * @blog     https://blog.csdn.net/juziaixiao
     * @version  1.0.0
     * @datetime 2020年7月21日15:25:02
     * @param    [array]          $params [输入参数]
     */
    public static  function DelCate($params)
    {
        $params = input('post.id');

        $id = explode(',', $params);

        $where_del = [['id' ,'in', $id]];
        $sql = Db::name('bizpro_class')->where($where_del);
        $cates=$sql->field('pid')->select();
        foreach ($cates as $v)
        {
            if($v['pid']< 1){
                return DataReturn('顶级分类无法删除', '20011');
            }
        }

        Db::startTrans();
        $re= Db::name('bizpro_class')->where($where_del)->delete();
        if (!$re)
        {
            Db::rollback();
            return DataReturn('删除分类失败', '20010');
        }
        Db::commit();
        return true;
    }



    /**
     * 处理商品分类
     * @author   juzi
     * @blog    https://blog.csdn.net/juziaixiao
     * @version 1.0.0
     * @date    2020年7月24日13:30:30
     * @desc    description
     * @param   [array]          $data [供应商数据 二维数组]
     */
    public static function HandleCate(){
        $catearr=Db::name('bizpro_class')->where('pid=0')->field('id,title')->select();
        $catestr='';
        foreach ($catearr as $catearr_v)
        {
            $catestr.=$catearr_v['id'].'-'.$catearr_v['title'].',';
        }
        return ['catearr'=>$catearr,'catestr'=>$catestr];
    }

}